package portal.web.order;

import java.util.Comparator;

import portal.vo.ProductoVO;

public class ListaProductosSortComparator implements Comparator{
	
	public static final int UNO = 1;

    public static final int MENOSUNO = -1;

    public static final int CERO = 0;

    public static final int ASCENDENTE = 1;

    public static final int DESCENDENTE = -1;

    private int tipoOrdenamiento = DESCENDENTE;

	
    private boolean sortPorCategoria = false;	

    private boolean sortPorFecha = false;
    
    private boolean sortPorPrecio = false;	

    private boolean sortPorRanking = false;	
    
    

	public int getTipoOrdenamiento() {
		return tipoOrdenamiento;
	}

	public void setTipoOrdenamiento(int tipoOrdenamiento) {
		this.tipoOrdenamiento = tipoOrdenamiento;
	}

	public boolean isSortPorCategoria() {
		return sortPorCategoria;
	}

	public void setSortPorCategoria(boolean sortPorCategoria) {
		this.sortPorCategoria = sortPorCategoria;
	}

	public boolean isSortPorFecha() {
		return sortPorFecha;
	}

	public void setSortPorFecha(boolean sortPorFecha) {
		this.sortPorFecha = sortPorFecha;
	}

	public boolean isSortPorPrecio() {
		return sortPorPrecio;
	}

	public void setSortPorPrecio(boolean sortPorPrecio) {
		this.sortPorPrecio = sortPorPrecio;
	}

	public boolean isSortPorRanking() {
		return sortPorRanking;
	}

	public void setSortPorRanking(boolean sortPorRanking) {
		this.sortPorRanking = sortPorRanking;
	}

	@Override
	public int compare(Object arg0, Object arg1) {
		ProductoVO productoUno = (ProductoVO) arg0;
		ProductoVO productoDos = (ProductoVO) arg1;
		 if (sortPorCategoria) {
            return this.sortByCategoria(productoUno, productoDos);
        }
		
		if (sortPorFecha) {
            return this.sortByFecha(productoUno, productoDos);
        }
        if (sortPorPrecio) {
            return this.sortByPrecio(productoUno, productoDos);
        }
        if (sortPorRanking) {
            return this.sortByRanking(productoUno, productoDos);
        }
        
        
		return 0;
	}
	
	/**
     * 
     * @param tipoOrden el tipo de orden (1 ascendente, -1 descendente)
     */
    public void setSortType(int tipoOrden) {
        this.tipoOrdenamiento = tipoOrden;
    }
    
    /**
     * ordena por Categoria
     * @return orden
     */
    private int sortByCategoria(ProductoVO productoUno, ProductoVO productoDos) {
        if (productoUno.getCategoria().compareToIgnoreCase(
        		productoDos.getCategoria()) > CERO) {	//menor uno que dos
            if (tipoOrdenamiento == DESCENDENTE) {
                return MENOSUNO;
            }
            return UNO;
        } else if (productoUno.getCategoria().compareToIgnoreCase(
        		productoDos.getCategoria()) < CERO) {

            if (tipoOrdenamiento == DESCENDENTE) {
                return UNO;
            }
            return MENOSUNO;
        } else {
            return CERO;
        }
    } 
    
    /**
     * ordenar por fecha
     * @return orden
     */
    private int sortByFecha(ProductoVO productoUno, ProductoVO productoDos) {
        if (productoUno.getFecha().before(productoDos.getFecha())) {
            if (tipoOrdenamiento == DESCENDENTE) {
                return UNO;
            } else {
                return MENOSUNO;
            }
        } else if (productoUno.getFecha().after(productoDos.getFecha())) {
            if (tipoOrdenamiento == DESCENDENTE) {
                return MENOSUNO;
            } else {
                return UNO;
            }
        } else {
            return CERO;
        }
    }
    
    /**
     * ordena por Precio
     * @return orden
     */
    private int sortByPrecio(ProductoVO productoUno, ProductoVO productoDos) {
        if (productoUno.getPrecio().compareTo(
        		productoDos.getPrecio()) > CERO) {	//menor uno que dos
            if (tipoOrdenamiento == DESCENDENTE) {
                return MENOSUNO;
            }
            return UNO;
        } else if (productoUno.getPrecio().compareTo(
        		productoDos.getPrecio()) < CERO) {

            if (tipoOrdenamiento == DESCENDENTE) {
                return UNO;
            }
            return MENOSUNO;
        } else {
            return CERO;
        }
    }

    /**
     * ordena por Ranking 
     * @return orden
     */
    private int sortByRanking(ProductoVO productoUno, ProductoVO productoDos) {
        if (productoUno.getRanking().compareTo(
        		productoDos.getRanking()) > CERO) {	//menor uno que dos
            if (tipoOrdenamiento == DESCENDENTE) {
                return MENOSUNO;
            }
            return UNO;
        } else if (productoUno.getRanking().compareTo(
        		productoDos.getRanking()) < CERO) {

            if (tipoOrdenamiento == DESCENDENTE) {
                return UNO;
            }
            return MENOSUNO;
        } else {
            return CERO;
        }
    }
}
